import { AxiosResponse } from "axios";

/**
 * http状态码
 * 根据http状态码对请求进行基础判断
 */
export enum HttpStatusCode {
    // 请求成功
    OK = 200 
    // 客户端请求的语法错误，服务器无法理解
    , BAD_REQUEST = 400
    // 请求要求用户的身份认证
    , ACCEPTED = 401
    // 服务器理解请求客户端的请求，但是拒绝执行此请求
    , FORBIDDEN = 403
    // 服务器无法根据客户端的请求找到资源（网页）。通过此代码，网站设计人员可设置"您所请求的资源无法找到"的个性页面
    , NOT_FOUND = 404
    // 客户端请求中的方法被禁止
    , METHOD_NOT_ALLOWED = 405
    // 服务器等待客户端发送的请求时间过长，超时
    , REQUEST_TIME_OUT = 408
    // 请求的URI过长（URI通常为网址），服务器无法处理
    , REQUEST_URI_TOO_LARGE = 414
    // 服务器无法处理请求附带的媒体格式
    , UNSUPPORTED = 415
    // 服务器内部错误，无法完成请求
    , INTERNAL_SERVER_ERROR = 500
    // 作为网关或者代理工作的服务器尝试执行请求时，从远程服务器接收到了一个无效的响应
    , BAD_GATEWAY = 502
    // 	充当网关或代理的服务器，未及时从远端服务器获取请求
    , GATEWAY_TIMEOUT = 504
}

/**
 * 返回状态码显示信息
 * @param response axios请求响应数据
 * @returns 
 */
export const getHttpStatusMessage = (response: AxiosResponse): string => {
    let msg;
    switch(response.status) {
        case HttpStatusCode.BAD_REQUEST:
            msg = '请求参数类型错误，服务端无法识别，请联系管理人员进行解决';
            break;
        case HttpStatusCode.NOT_FOUND:
            msg = '未找到当前的请求：' + response.config.url + '，请联系管理人员进行解决';
            break;
        case HttpStatusCode.METHOD_NOT_ALLOWED:
            msg = '当前请求方法' + response.config.method + '不允许，请联系管理人员进行解决';
            break;
        case HttpStatusCode.REQUEST_TIME_OUT:
            msg = '服务端响应时间过慢，请求断开，请联系管理人员进行解决';
            break;
        case HttpStatusCode.REQUEST_URI_TOO_LARGE:
            msg = '请求地址过长，无法解析，请联系管理人员进行解决';
            break;
        case HttpStatusCode.UNSUPPORTED:
            msg = '上传附件类型不支持';
            break;
        case HttpStatusCode.INTERNAL_SERVER_ERROR:
            msg = '服务端出现未捕获的错误，请联系管理人员进行解决';
            break;
        case HttpStatusCode.BAD_GATEWAY:
            msg = '网络异常，请确认当前网络是否可用';
            break;
        case HttpStatusCode.GATEWAY_TIMEOUT:
            msg = '服务器网络异常，请联系管理人员进行解决';
            break;
        default:
            msg = '请求错误：' + response.status;
    }
    return msg;
}